package clasificador.redneuronal;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import clasificador.redneuronal.neurona.Neurona;
import clasificador.redneuronal.neurona.NeuronaSigmoide;
import datos.AtributoFinito;
import datos.MuestraClasificada;

public class PerceptronSimpleSigmoide<Clase> extends RedNeuronal<Clase> {

	public PerceptronSimpleSigmoide(MuestraClasificada<Clase> datosEntrenamiento,
			Map<String, Object> parametros) {
		super(datosEntrenamiento, parametros);
	}

	@Override
	protected Set<Neurona> generarRed(
			MuestraClasificada<Clase> datosEntrenamiento) {
		AtributoFinito<Clase> clase = (AtributoFinito<Clase>)datosEntrenamiento.getClase();
				
		Set<InputSignal> inputs = this.createInputs(datosEntrenamiento);	
		
		Map<Clase,Neurona> outs = new HashMap<Clase,Neurona>(clase.getRango().size());
		Set<Neurona> neuronas = new HashSet<Neurona>(clase.getRango().size());		
	
		for(Clase c: clase.getRango())
		{
			NeuronaSigmoide miNeurona = new NeuronaSigmoide();		
			
			for(InputSignal in: inputs)
			{
				miNeurona.linkBack(in);
			}
			
			neuronas.add(miNeurona);
			outs.put(c,miNeurona);			
		}
		
		this.createOutputs(datosEntrenamiento,outs);
		
		return neuronas;	
	}

}
